package com.cskaoyan.javase.oop2._1extends._0introduction._2new;

/**
 * @description: 继承的引入
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * - 分别定义一个表示人和学生的类
 *   - 人类：有姓名属性，以及吃饭这个行为
 *   - 学生类：有姓名，学号两个属性，同时有吃饭，学习两种行为
 *   - 教师类：有姓名，教师号两个属性，同时有吃饭，教学两种行为
 *
 * 使用继承,复用Person类中的属性name和eat方法
 * 继承的语法,java中定义一个类时,可以明确的指出它需要继承复用某个类的成员,使用以下语法:
 *      [各种修饰符] class 类名 extends 一个已经定义好的类的类名/被继承的类{
 *          //类体
 *      }
 *  解释一下:
 *       1.我们把继承一个已存在的类的类称之为子类,被继承的已经存在的类称之为父类
 *       2.子类继承父类后,会得到父类的所有成员(包括静态和非静态成员,不包括构造器)
 *       注: 静态成员虽然能继承,但是它和对象无关,所以我们一般不讨论它的继承.我们后面讨论的继承都是指普通成员的继承
 *       3.子类在继承父类的同时,还可以自己定义成员,这叫做子类在父类的基础上,扩展了父类(所以子类往往比父类的功能更加强大,青出于蓝而胜于蓝)
 *       4.子类不能继承父类没有的成员
 *       5.继承的本质是复用成员
 *
 *
 */
public class NewDemo {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.name);
        //s.age

        Teacher t = new Teacher();
        t.eat();
    }

}

//Person类作为父类
class Person {
    String name;
    int age;

    public void eat() {
        System.out.println("吃饭");
    }
}

//Student和Teacher作为子类
class Student extends Person {
    //String name;
    int stuId;

    //public void eat() {
    //    System.out.println("吃饭");
    //}

    public void study() {
        System.out.println("学习");
    }
}

class Teacher extends Person {
    //String name;
    int teacherId;

    //public void eat() {
    //    System.out.println("吃饭");
    //}

    public void teach() {
        System.out.println("上课");
    }
}